C# Decimal Double Single等区别

您所在的位置:网站首页 decimal 和double C# Decimal Double Single等区别

C# Decimal Double Single等区别

2024-06-27 17:24| 来源: 网络整理| 查看: 265

UInt64

UInt64 值类型表示值介于 0 到 18,446,744,073,709,551,615 之间的无符号整数。

UInt64 为比较此类型的实例,将实例的值转换为它的字符串表示形式以及将数字的字符串表示形式转换为此类型的实例提供了相应的方法。

警告 在 32 位 Intel 计算机上分配 64 位值不是原子操作;即该操作不是线程安全的。这意味着,如果两个人同时将一个值分配给一个静态 UInt64 字段,则该字段的最终值是无法预测的。  

Decimal

Decimal 值类型表示从正 79,228,162,514,264,337,593,543,950,335 到负 79,228,162,514,264,337,593,543,950,335 之间的十进制数。Decimal 值类型适用于要求使用大量有效的整数及小数位数并且没有舍入错误的财务计算。

十进制数是由符号、数值和比例因子组成的浮点值,数值的每一位的范围都是 0 到 9,比例因子指示分隔数值的整数和小数部分的浮点小数点的位置。

Decimal 值的二进制表示形式由 1 位符号、96 位整数以及比例因子组成,比例因子用作 96 位整数的除数并指定整数的哪一部分为小数。比例因子隐式地定为数字 10 的幂,指数范围从 0 到 28。因此,Decimal 值的二进制表示形式为:((-296 到 296) / 10(0 到 28)),其中 -296-1 等于 MinValue,而 296-1 等于 MaxValue。

比例因子还保留 Decimal 数字中的所有尾随零。在算术或比较运算中,尾随零并不影响 Decimal 数字的值。但是,如果应用了正确的格式字符串,则可由 ToString 方法显示尾随零。

有关转换的注意事项 此类型提供将 Decimal 值转换为 Char、SByte、Int16、Int32、Int64、Byte、UInt16、UInt32 和 UInt64 类型及其反向转换的方法。从其他类型到 Decimal 的转换属于扩大转换,不会丢失信息或引发异常。

从 Decimal 到其他类型的转换属于收缩转换,会将 Decimal 值向零舍入为最接近的整数值。如果转换结果无法以目标类型表示,则引发 OverflowException。

此类型提供将 Decimal 值转换为 Single 和 Double 的方法及其反向转换的方法。从 Decimal 到 Single 或 Double 的转换属于收缩转换,可能会丢失精度,但不会丢失所转换值的数量大小信息。此类转换不会引发异常。

如果从 Single 或 Double 到 Decimal 的转换的结果无法表示为 Decimal,则将引发 OverflowException。

 

Double

Double 值类型表示一个值介于 -1.79769313486232e308 和 +1.79769313486232e308 之间的双精度 64 位数字,以及 +0 或-0、PositiveInfinity、NegativeInfinity 和非数字 (NaN)。

Double 符合二进制浮点算法的 IEC 60559:1989 (IEEE 754) 标准。

Double 为比较此类型的实例,将实例的值转换为它的字符串表示形式以及将数字的字符串表示形式转换为此类型的实例提供了相应的方法。有关格式规范代码如何控制值类型的字符串表示形式的信息,请参见格式化概述、标准数字格式字符串 和 自定义数字格式字符串。

使用浮点数 在执行二进制运算时,如果其中一个操作数为 Double,那么另一个操作数必须是整数类型或浮点类型(Double 或 Single)。在执行运算之前,如果另一个操作数不是 Double,应将其转换为 Double,并且至少要使用 Double 的范围和精度来执行运算。如果此运算得到一个数字结果,则结果的类型为 Double。

浮点运算符(包括赋值运算符)不会引发异常。在异常情况下,浮点运算的结果为零、无穷或 NaN,如下所述:

如果浮点运算的结果对于目标格式来说太小,则运算的结果为零。

如果浮点运算结果的数值对于目标格式来说太大,则运算的结果为 PositiveInfinity 或 NegativeInfinity(具体取决于结果的符号)。

如果浮点运算无效,则运算的结果为 NaN。

如果浮点运算的一个或两个操作数为 NaN,则运算的结果为 NaN。

请记住,浮点数只能近似于十进制数字,浮点数的精度决定了浮点数近似于十进制数字的精确程度。默认情况下,Double 值的精度是 15 个十进制位,但内部维护的最大精度是 17 位。浮点数的精度有几种结果:

特定精度下看似相等的两个浮点数可能并不相等,因为它们的最小有效位数不同。

由于浮点数可能无法精确近似于十进制数,如果使用十进制数,则使用浮点数的数学或比较运算可能不会产生相同的结果。

如果涉及浮点数,值可能不往返。值的往返是指,某个运算将原始浮点数转换为另一种格式,而反向运算又将转换后的格式转换回浮点数,且最终浮点数与原始浮点数相等。由于一个或多个最低有效位可能在转换中丢失或更改,往返可能会失败。

 

Single

Single 值类型表示一个值介于 -3.402823e38 和 +3.402823e38 之间的单精度 32 位数字,以及正零或负零、PositiveInfinity、NegativeInfinity 和非数字 (NaN)。

Single 符合二进制浮点算法的 IEC 60559:1989 (IEEE 754) 标准。

Single 为比较此类型的实例,将实例的值转换为它的字符串表示形式以及将数字的字符串表示形式转换为此类型的实例提供了相应的方法。有关格式规范代码如何控制值类型的字符串表示形式的信息,请参见格式化概述、标准数字格式字符串 和 自定义数字格式字符串。

使用浮点数 在执行二进制运算时,如果一个操作数为浮点类型(Single 或 Double),那么另一个操作数应当为整数类型或浮点类型。此运算计算如下:

如果其中一个操作数为整数类型,那么该操作数将被转换为另一个操作数所属的浮点类型。

然后,如果任意一个操作数为 Double,则另一个操作数将被转换为 Double,并且至少使用 Double 的范围和精度执行运算。对于数值运算,结果的类型为 Double。

否则,将至少使用 Single 类型的范围和精度执行运算,而且对于数值运算,结果的类型为 Single。

浮点运算符(包括赋值运算符)不会引发异常。在异常情况下,浮点运算的结果为零、无穷或 NaN,如下所述:

如果浮点运算的结果对于目标格式来说太小,则运算的结果为零。

如果浮点运算结果的数值对于目标格式来说太大,则运算的结果为 PositiveInfinity 或 NegativeInfinity(具体取决于结果的符号)。

如果浮点运算无效,则运算的结果为 NaN。

如果浮点运算的一个或两个操作数为 NaN,则运算的结果为 NaN。

请记住,浮点数只能近似于十进制数字,浮点数的精度决定了浮点数近似于十进制数字的精确程度。默认情况下,Single 值只包含 7 位精度,但内部维护的最大精度是 9 位。浮点数的精度有几个结果:

某个特定精度似乎相等的两个浮点数可能会因为其最低有效位不同而不相等。

由于浮点数可能无法精确近似于十进制数,如果使用十进制数,则使用浮点数的数学或比较运算可能不会产生相同的结果。

如果涉及浮点数,值可能不往返。值的往返是指,某个运算将原始浮点数转换为另一种格式,而反向运算又将转换后的格式转换回浮点数,且最终浮点数与原始浮点数相等。由于一个或多个最低有效位在转换中丢失或更改,往返可能失败。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3